package com.justnow.offer;

import java.util.HashMap;
import java.util.Map;

/**
 * @author justnow
 * Created on 2020-10-13
 * Description
 *
 *
 * 买饮料
 * 时间限制： 3000MS
 * 内存限制： 589824KB
 * 题目描述：
 * 游游今年就要毕业了，和同学们在携程上定制了日本毕业旅行。愉快的一天行程结束后大家回到了酒店房间，这时候同学们都很口渴，石头剪刀布选出游游去楼下的自动贩卖机给大家买可乐。
 *
 * 贩卖机只支持硬币支付，且收退都只支持10 ，50，100 三种面额。一次购买行为只能出一瓶可乐，且每次购买后总是找零最小枚数的硬币。（例如投入100圆，可乐30圆，则找零50圆一枚，10圆两枚）
 *
 * 游游需要购买的可乐数量是 m，其中手头拥有的 10,50,100 面额硬币的枚数分别是 a,b,c，可乐的价格是x(x是10的倍数)。
 *
 * 如果游游优先使用大面额购买且钱是够的情况下,请计算出需要投入硬币次数？
 *
 *
 *
 * 输入描述
 * 依次输入，
 *
 * 需要可乐的数量为 m
 *
 * 10元的张数为 a
 *
 * 50元的张数为 b
 *
 * 100元的张树为 c
 *
 * 1瓶可乐的价格为 x
 *
 * 输出描述
 * 输出当前金额下需要投入硬币的次数
 *
 * 例如需要购买2瓶可乐，每瓶可乐250圆，手里有100圆3枚，50圆4枚，10圆1枚。
 *
 * 购买第1瓶投递100圆3枚，找50圆
 *
 * 购买第2瓶投递50圆5枚
 *
 * 所以是总共需要操作8次金额投递操作
 *
 *
 * 样例输入
 * 2
 * 1
 * 4
 * 3
 * 250
 * 样例输出
 * 8
 */
public class Xiecheng01 {
    public static void main(String[] args) {
        int i = buyCoke(2, 1, 4, 3, 250);
        System.out.println(i);
    }

    static int buyCoke(int m, int a, int b, int c, int x) {
        int count = 0;

        Map<Integer, Integer> map = new HashMap<>();
        map.put(10, a);
        map.put(50, b);
        map.put(100, c);

        for (int i = 0; i < m; i++) {
            int add100 = 0;
            while (add100 <= x ) {
                if (map.get(100) > 0) {
                    add100 += map.get(100);
                    map.put(100, map.get(100)-1);
                    count++;
                } else {
                    break;
                }
            }
            x = add100 - x;
            if (x == 0) {
                continue;
            }
            int add50 = 0;

            while (add50 <= x) {
                if (map.get(50) > 0) {
                    add50 += map.get(50);
                    map.put(50, map.get(50) - 1);
                    count++;
                } else {
                    break;
                }
            }
            x = add50 - x;
            if (x == 0) {
                continue;
            }

            int add10 = 0;

            while (add10 <= x) {
                if (map.get(10) > 0) {
                    add50 += map.get(10);
                    map.put(10, map.get(10) - 1);
                    count++;
                } else {
                    break;
                }
            }
            x = add10 - x;
            if (x == 0) {
                continue;
            }
        }
        return count;
    }
}
